import 'package:flutter/cupertino.dart';
import 'package:netease_cloud_music_api/netease_cloud_music_api.dart';
import 'package:netease_cloud_music_api/utils/request.dart';

mixin PlayList {
  /// 歌单分类
  /// 说明 : 调用此接口,可获取歌单分类,包含 category 信息
  Future<PlayerRequestResponse> playListCatList() {
    return PlayerRequest(
      url: 'https://music.163.com/weapi/playlist/catalogue',
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 新建歌单
  /// 说明 : 调用此接口 , 传入歌单名字可新建歌单
  /// [name] 歌单名称 必选
  /// [privacy] 是否设置为隐私歌单，默认否，传 true 则设置成隐私歌单
  /// [type] 歌单类型, 默认为 false, 传 true 则为视频歌单
  Future<PlayerRequestResponse> playListCreate({required String name, bool? privacy, bool? type}) {
    privacy = privacy ?? false;
    type = type ?? false;
    Map<String, dynamic> data = {'name': name, 'privacy': privacy ? 10 : 0, 'type': type ? 'VIDEO' : 'NORMAL'};
    return PlayerRequest(
      url: 'https://music.163.com/api/playlist/create',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 删除歌单
  /// 说明 : 调用此接口 , 传入歌单id可删除歌单
  /// [ids] : 歌单id, 可多个
  Future<PlayerRequestResponse> playListDelete({required List<int> ids}) {
    Map<String, dynamic> data = {
      'ids': ids.toString(),
    };
    return PlayerRequest(
      url: 'https://music.163.com/weapi/playlist/remove',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.weapi),
    ).request();
  }

  /// 更新歌单描述
  /// 说明 : 登录后调用此接口,可以单独更新用户歌单描述
  /// [id] : 歌单id
  /// [desc] :歌单描述
  Future<PlayerRequestResponse> playListDescUpdate({required int id, required String desc}) {
    Map<String, dynamic> data = {'id': id, 'desc': desc};
    return PlayerRequest(
      url: 'http://interface3.music.163.com/eapi/playlist/desc/update',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.eapi, url: '/api/playlist/desc/update'),
    ).request();
  }

  /// 获取歌单详情
  /// 说明 : 歌单能看到歌单名字, 但看不到具体歌单内容 , 调用此接口 , 传入歌单 id,
  /// 可以获取对应歌单内的所有的音乐(未登录状态只能获取不完整的歌单,登录后是完整的)，但是返回的trackIds是完整的，
  /// tracks 则是不完整的，可拿全部 trackIds 请求一次 songDetail() 接口获取所有歌曲的详情
  /// [id] : 歌单 id 必选
  /// [s] : 歌单最近的 s 个收藏者,默认为8 可选
  Future<PlayerRequestResponse> playListDetail({required int id, int? s}) {
    Map<String, dynamic> data = {'id': id, 'n': 100000, 's': s ?? 8};
    return PlayerRequest(
      url: 'https://music.163.com/api/v6/playlist/detail',
      data: data,
      options: PlayerRequestOptions(method: PlayerRequestMethod.post, crypto: EncryptType.linuxapi),
    ).request();
  }
}
